package com.wanqing.service;

import com.wanqing.dto.BookDTO;
import com.wanqing.dto.BookPageQueryDTO;
import com.wanqing.entity.Book;
import com.wanqing.result.PageResult;
import com.wanqing.vo.BookVO;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.util.List;

/**
 * 图书服务接口
 */
public interface BookService {

    /**
     * 保存图书信息
     *
     * @param bookDTO 图书数据传输对象，包含图书基本信息
     * @throws RuntimeException 如果保存过程中发生错误，则抛出运行时异常
     */
    void save(BookDTO bookDTO);

    /**
     * 分页查询图书信息
     *
     * @param bookPageQueryDTO 包含查询条件和分页参数的图书查询数据传输对象
     * @return 返回包含图书查询结果的分页对象
     */
    PageResult pageQuery(BookPageQueryDTO bookPageQueryDTO,boolean isPaged);

    /**
     * 批量删除图书
     *
     * @param ids 要删除的图书的ID列表
     * @throws RuntimeException 如果删除过程中发生错误，则抛出运行时异常
     */
    @Transactional
    void deleteBatch(List<Long> ids);

    /**
     * 根据图书ID查询图书信息
     *
     * @param id 图书的唯一标识符
     * @return 返回图书对象
     */
    BookVO getById(Long id);

    /**
     * 更新图书信息及其对应的口味
     *
     * @param bookDTO 图书数据传输对象，包含更新后的图书基本信息及其口味信息
     * @throws RuntimeException 如果更新过程中发生错误，则抛出运行时异常
     */
    @Transactional
    void update(BookDTO bookDTO);

    /**
     * 更新图书状态
     *
     * @param status 新的图书状态
     * @param id     要更新状态的图书的ID
     * @throws RuntimeException 如果更新过程中发生错误，则抛出运行时异常
     */
    void updateStatus(Integer status, Long id);

    List<Book> getByCategoryId(Long categoryId);

    List<BookVO> list(Book book);

    List<BookVO> bookStockWarning();

    List<Book> bookDisabled(LocalDate begin, LocalDate end);

    Book getBook(BookDTO bookDTO);
}
